Using the Editing Functions and Putting a File on the Clipboard

The following example cuts, copies, or deletes segments from an array of streams. The cut and copied streams are merged into a new file and placed on the clipboard. The functions used include EditStreamClone58TK_X_, EditStreamCopyD6IT56, and EditStreamCut32IRAX4.

// Global variables

// gcpavi - count of streams in an AVI file

// gapavi[] - array of stream-interface pointers, used as data source

// gapaviSel[] - stream-interface pointers of edited streams

// galSelStart[] - edit starting point in each stream

// galSelLen[] - length of edit to make in each stream

// gapaviTemp[] - array of stream-interface pointers put on clipboard

//

// Comment:

//     The editable streams in gapaviSel have been

//     initialized with CreateEditableStreamL_MQ3U.

//

 

case MENU_CUT:

case MENU_COPY:

case MENU_DELETE:

    PAVIFILE pf;

    int      i;

 

    // Walk list of selections and make streams out of each section.

    gcpaviSel = 0;  // index counter for destination streams

    for (i = 0; i < gcpavi; i++) { 

        if (galSelStart[i] != -1) { 

            if (wParam == MENU_COPY)

                EditStreamCopy(gapavi[i], &galSelStart[i],

                &galSelLen[i], &gapaviSel[gcpaviSel++]);

            else { 

                EditStreamCut(gapavi[i], &galSelStart[i],

                &galSelLen[i], &gapaviSel[gcpaviSel++]);

            }

        }

    }

 

.

.

.

    // Put on the clipboard if segment is not deleted.

    if (gcpaviSel && wParam != MENU_DELETE) { 

        PAVISTREAM   gapaviTemp[MAXNUMSTREAMS];

        int i;

 

        // Clone the edited streams, so that if the user does

        // more editing, the clipboard won't change.

        for (i = 0; i < gcpaviSel; i++) { 

            gapaviTemp[i] = NULL;

            EditStreamClone(gapaviSel[i], &gapaviTemp[i]);

            //

            // Place error check here.

            //

        }

 

        // Create a file from the streams and put on clipboard.

        AVIMakeFileFromStreams(&pf, gcpaviSel, gapaviTemp);

        AVIPutFileOnClipboard(pf);

 

        // Release clone streams.

        for (i = 0; i < gcpaviSel; i++) { 

            AVIStreamRelease(gapaviTemp[i]);

        }

 

        // Release file put on clipboard.

        AVIFileRelease(pf);

    }

 

    // Release streams created.

    for (i = 0; i < gcpaviSel; i++)

        AVIStreamRelease(gapaviSel[i]);

}